################################################################################
# Lempel Ziv Storer Szymanski (LZSS)
#
# File     : Makefile
# Autore   : Gianluca Costante
#
################################################################################

CC = gcc
LD = gcc
CFLAGS = -O2 -Wall -ansi -c
LDFLAGS = -O2 -o

ifeq ($(OS),Windows_NT)
	OS = Windows
endif

ifeq ($(OS),Windows)
	EXE = .exe
	DEL = del
else	
	EXE =
	DEL = rm -f
endif

################################################################################
# LZSS_TYPE indica il tipo di codifica che si utilizza per scrivere sul file di 
# output la coppia offset e length.
#
# lzss          - codifica standard, 16 bit per l'offset e 4 per length
# lzss_variable - cofifica variabile, impostabile attraverso il file lzss.h
#
################################################################################
#LZSS_TYPE = lzss
LZSS_TYPE = lzss_variable

################################################################################
# MAIN indica il file da compilare per la parte che chiama la codifica o la
# decodifica (nel caso si vorrebbe un'altra implementazione)
#
################################################################################
MAIN = main
#MAIN = main2

all:		clean lzss$(EXE)

lzss$(EXE):	$(MAIN).o $(LZSS_TYPE).o benchmark.o bitfile.o 
		$(LD) $^ $(LDFLAGS) $@

$(MAIN).o:	$(MAIN).c lzss.h 
		$(CC) $(CFLAGS) $<

$(LZSS_TYPE).o:	$(LZSS_TYPE).c bitfile.h
		$(CC) $(CFLAGS) $< 
	
benchmark.o:	benchmark.c
		$(CC) $(CFLAGS) $<

bitfile.o:	bitfile.c bitfile.h
		$(CC) $(CFLAGS) $<

clean:
		$(DEL) *.o
		$(DEL) lzss$(EXE)
